package br.com.dallasmotopecas.comum.cliente.vo;

import java.io.Serializable;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import br.com.dallasmotopecas.comum.funcionario.vo.FuncionarioVo;
import br.com.dallasmotopecas.util.lang.StringUtil;
import br.com.dallasmotopecas.util.validacao.ValidarObjeto;
import br.com.dallasmotopecas.util.vo.EntidadeVo;

public class ClienteVo extends EntidadeVo implements Serializable,
		Comparable<ClienteVo>
{
	private static final long serialVersionUID = 1L;
	private String razao;
	private String fantasia;
	private Date dataCadastro;
	private String situacaoDesativado;
	private String emailHum;
	private String emailDois;
	private String foneHum;
	private String foneDois;
	private FuncionarioVo funcionarioVo;
	private String observacaoInformativa;
	private String observacaoRestritiva;
	private String observacaoJuducial;
	private String contato;
	private List<ClienteDadosVo> dadosCliente;
	private List<ClienteVo> clienteAssociados;

	public ClienteVo()
	{

	}

	public String getRazao()
	{
		return razao;
	}

	public void setRazao(String razao)
	{
		if (ValidarObjeto.isStringValida(razao))
			this.razao = StringUtil.getStringComInicialMaiusculo(razao);
		else
			this.razao = "";
	}

	public String getFantasia()
	{
		return fantasia;
	}

	public void setFantasia(String fantasia)
	{
		if (ValidarObjeto.isStringValida(fantasia))
			this.fantasia = StringUtil.getStringComInicialMaiusculo(fantasia);
		else
			this.fantasia = "";
	}

	public String getEmailHum()
	{
		return emailHum;
	}

	public void setEmailHum(String emailHum)
	{
		this.emailHum = emailHum;
	}

	public String getEmailDois()
	{
		return emailDois;
	}

	public void setEmailDois(String emailDois)
	{
		this.emailDois = emailDois;
	}

	public String getFoneHum()
	{
		return foneHum;
	}

	public void setFoneHum(String foneHum)
	{
		this.foneHum = foneHum;
	}

	public String getFoneDois()
	{
		return foneDois;
	}

	public void setFoneDois(String foneDois)
	{
		this.foneDois = foneDois;
	}

	public FuncionarioVo getFuncionarioVo()
	{
		if (funcionarioVo == null)
			funcionarioVo = new FuncionarioVo();

		return funcionarioVo;
	}

	public void setFuncionarioVo(FuncionarioVo funcionarioVo)
	{
		this.funcionarioVo = funcionarioVo;
	}

	public Date getDataCadastro()
	{
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro)
	{
		this.dataCadastro = dataCadastro;
	}

	public String getObservacaoInformativa()
	{
		return observacaoInformativa;
	}

	public void setObservacaoInformativa(String observacaoInformativa)
	{
		this.observacaoInformativa = observacaoInformativa;
	}

	public String getObservacaoRestritiva()
	{
		return observacaoRestritiva;
	}

	public void setObservacaoRestritiva(String observacaoRestritiva)
	{
		this.observacaoRestritiva = observacaoRestritiva;
	}

	public String getObservacaoJuducial()
	{
		return observacaoJuducial;
	}

	public void setObservacaoJuducial(String observacaoJuducial)
	{
		this.observacaoJuducial = observacaoJuducial;
	}

	public List<ClienteDadosVo> getDadosCliente()
	{
		if (dadosCliente == null)
			dadosCliente = new ArrayList<ClienteDadosVo>();

		return dadosCliente;
	}

	public void setDadosCliente(List<ClienteDadosVo> dadosCliente)
	{
		this.dadosCliente = dadosCliente;
	}

	public List<ClienteVo> getClienteAssociados()
	{
		if (clienteAssociados == null)
			clienteAssociados = new ArrayList<ClienteVo>();

		return clienteAssociados;
	}

	public void setClienteAssociados(List<ClienteVo> clienteAssociados)
	{
		this.clienteAssociados = clienteAssociados;
	}

	public String getSituacaoDesativado()
	{
		return situacaoDesativado;
	}

	public void setSituacaoDesativado(String situacaoDesativado)
	{
		this.situacaoDesativado = situacaoDesativado;
	}

	public String getContato()
	{
		return contato;
	}

	public void setContato(String contato)
	{
		if (ValidarObjeto.isStringValida(contato))
			this.contato = StringUtil.getStringComInicialMaiusculo(contato);
		else
			this.contato = "";
	}

	@Override
	public int hashCode()
	{
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result + ((contato == null) ? 0 : contato.hashCode());
		result = prime * result
				+ ((dataCadastro == null) ? 0 : dataCadastro.hashCode());
		result = prime * result
				+ ((emailDois == null) ? 0 : emailDois.hashCode());
		result = prime * result
				+ ((emailHum == null) ? 0 : emailHum.hashCode());
		result = prime * result
				+ ((fantasia == null) ? 0 : fantasia.hashCode());
		result = prime * result
				+ ((foneDois == null) ? 0 : foneDois.hashCode());
		result = prime * result + ((foneHum == null) ? 0 : foneHum.hashCode());
		result = prime * result + (int) (id ^ (id >>> 32));
		result = prime
				* result
				+ ((observacaoInformativa == null) ? 0 : observacaoInformativa
						.hashCode());
		result = prime
				* result
				+ ((observacaoJuducial == null) ? 0 : observacaoJuducial
						.hashCode());
		result = prime
				* result
				+ ((observacaoRestritiva == null) ? 0 : observacaoRestritiva
						.hashCode());
		result = prime * result + ((razao == null) ? 0 : razao.hashCode());
		result = prime
				* result
				+ ((situacaoDesativado == null) ? 0 : situacaoDesativado
						.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj)
	{
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		ClienteVo other = (ClienteVo) obj;
		if (contato == null)
		{
			if (other.contato != null)
				return false;
		}
		else if (!contato.equals(other.contato))
			return false;
		if (dataCadastro == null)
		{
			if (other.dataCadastro != null)
				return false;
		}
		else if (!dataCadastro.equals(other.dataCadastro))
			return false;
		if (emailDois == null)
		{
			if (other.emailDois != null)
				return false;
		}
		else if (!emailDois.equals(other.emailDois))
			return false;
		if (emailHum == null)
		{
			if (other.emailHum != null)
				return false;
		}
		else if (!emailHum.equals(other.emailHum))
			return false;
		if (fantasia == null)
		{
			if (other.fantasia != null)
				return false;
		}
		else if (!fantasia.equals(other.fantasia))
			return false;
		if (foneDois == null)
		{
			if (other.foneDois != null)
				return false;
		}
		else if (!foneDois.equals(other.foneDois))
			return false;
		if (foneHum == null)
		{
			if (other.foneHum != null)
				return false;
		}
		else if (!foneHum.equals(other.foneHum))
			return false;
		if (id != other.id)
			return false;
		if (observacaoInformativa == null)
		{
			if (other.observacaoInformativa != null)
				return false;
		}
		else if (!observacaoInformativa.equals(other.observacaoInformativa))
			return false;
		if (observacaoJuducial == null)
		{
			if (other.observacaoJuducial != null)
				return false;
		}
		else if (!observacaoJuducial.equals(other.observacaoJuducial))
			return false;
		if (observacaoRestritiva == null)
		{
			if (other.observacaoRestritiva != null)
				return false;
		}
		else if (!observacaoRestritiva.equals(other.observacaoRestritiva))
			return false;
		if (razao == null)
		{
			if (other.razao != null)
				return false;
		}
		else if (!razao.equals(other.razao))
			return false;
		if (situacaoDesativado == null)
		{
			if (other.situacaoDesativado != null)
				return false;
		}
		else if (!situacaoDesativado.equals(other.situacaoDesativado))
			return false;
		return true;
	}

	@Override
	public int compareTo(ClienteVo o)
	{
		return this.razao.compareTo(o.razao);
	}

}
